import axios from 'axios'

const BASE_URL = 'http://localhost:8888'
// const METHODS = ['GET', 'POST']
// 对aixos进行二次封装
class MYRequest {
  constructor() {
    // 创建一个带有基础URL的 Axios 实例
    this.axiosInstance = axios.create({
      baseURL: BASE_URL
    })

    // 添加请求拦截器
    this.axiosInstance.interceptors.request.use(
      (config) => {
        // 在发送请求之前做一些处理
        // 添加认证信息的自定义逻辑(判断是否存在 token, 存在则添加到请求头中)
        // token从localStorage中获取
        const token = localStorage.getItem('token')
        if (token) {
          config.headers.Authorization = `Bearer ${token}`
        }
        return config
      },
      (error) => {
        // 处理请求错误
        return Promise.reject(error)
      }
    )

    // 添加响应拦截器
    this.axiosInstance.interceptors.response.use(
      (response) => {
        // 在响应返回之后做一些处理
        // // response.data 的数据结构是 { status，data，message }
        // 根据 status 是否是success' 进行成功的判断
        // 先判断返回结果是否有值
        const resData = response.data || {}
        if (resData.status === 'success') {
          return resData.data
        } else {
          return Promise.reject(response)
        }
      },
      (error) => {
        // 处理响应错误
        return Promise.reject(error)
      }
    )
  }

  request(url, method, data, options) {
    return new Promise((resolve, reject) => {
      const newOptions = {
        method,
        ...options
      }

      if (method === 'GET') {
        newOptions.params = data
      }
      if (method === 'POST') {
        newOptions.data = data
      }

      // 使用 axiosInstance 发送请求
      this.axiosInstance(url, newOptions)
        .then((res) => {
          resolve(res.data)
        })
        .catch((error) => {
          reject(error)
        })
    })
  }

  get(url, params, options) {
    // 发送 GET 请求
    return this.request(url, 'GET', params, options)
  }

  post(url, data, options) {
    // 发送 POST 请求
    return this.request(url, 'POST', data, options)
  }
}

export default new MYRequest()
